/**  
 * @Title:  patPractice0013.java   
 * @Package com.wkr.pat.basiclevel   
 * @Description:    TODO(用一句话描述该文件做什么)   
 * @author: WuKangrong     
 * @date:   2018年7月22日 下午10:30:20   
 * @version V
 * @JDKversion:1.8.0
 * @Copyright: 2018  
*/
package com.wkr.pat.basiclevel;
import java.util.*;
/**   
 * @ClassName:  patPractice0013   
 * @Description:TODO(这里用一句话描述这个类的作用)   
 * @author: WuKangrong 
 * @date:   2018年7月22日 下午10:30:20     
 * @Copyright: 2018 
 */
public class patPractice0013 {
	static int[] storeData;//存放规定范围内的素数
	static int counts = 0;//素数的数量
	static int number = 2;//自然数从2开始
	static int primeNumber_Begin = 0;//要输出素数范围的起始位置
	static int primeNumber_End = 0;//要输出素数范围的末尾位置
	/**   
	 * @Title: main   
	 * @Description: TODO(这里用一句话描述这个方法的作用)   
	 * @param: @param args      
	 * @return: void      
	 * @throws   
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		inputIteration();
		countPrimeNumber();
		printPrimeNumber();
		System.out.println("运行结束！");
	}
	/**   
	 * @Title: inputIteration   
	 * @Description: TODO(输入交互)   
	 * @param:       
	 * @return: void      
	 * @throws   
	 */
	static void inputIteration()
	{
		Scanner input = new Scanner(System.in);
		System.out.print("请输入素数开始的位置：");
		primeNumber_Begin = input.nextInt();
		System.out.print("请输入素数结束的位置：");
		primeNumber_End = input.nextInt();
		while(primeNumber_Begin <=  0 || primeNumber_End < primeNumber_Begin) {
			if(primeNumber_Begin <=  0) {
				System.out.println("开始位置不得小于1！");
				System.out.print("请重新输入素数开始的位置：");
				primeNumber_Begin = input.nextInt();
			}else {
				System.out.println("结束位置不得小于开始位置！");
				System.out.print("请重新输入素数结束的位置：");
				primeNumber_End = input.nextInt();
			}
			
		}
		storeData = new int[primeNumber_End];
	}
	
	/**   
	 * @Title: countPrimeNumber   
	 * @Description: TODO(统计素数并将第primeNumber_Begin位到第primeNumber_End位中所有素数存入到数组内)   
	 * @param:       
	 * @return: void      
	 * @throws   
	 */
	static void countPrimeNumber()
	{
		int aliquotCount;//被整除的次数
		while(counts < primeNumber_End - 1) {
			//被整除的次数归零
			aliquotCount = 0;
			//检验是否能被整除
			for(int move_Flag = 2; move_Flag < number; move_Flag++) {
				if(number % move_Flag == 0) {
					aliquotCount++;
					break;
				}
			}
			//2作为特例特别输出
			if(number == 2) {
				storeData[0] = 2;
			}
			//不能被除1和其自身整除的数
			if(aliquotCount == 0 && number != 2) {
				counts++;//有顺序先加顺序在赋值
				storeData[counts] = number;
			}
			//System.out.println("第" + counts + "个素数为： " + number);
			number++;
		}
	}
	
	/**   
	 * @Title: printPrimeNumber   
	 * @Description: TODO(打印数组内的数组即输出第primeNumber_Begin位到第primeNumber_End位中所有素数)   
	 * @param:       
	 * @return: void      
	 * @throws   
	 */
	static void printPrimeNumber()
	{
		int print_Flag = 0;//输出格式控制
		for(int move_Flag = primeNumber_Begin - 1; move_Flag < primeNumber_End; move_Flag++) {
			System.out.print(storeData[move_Flag] + " ");
			print_Flag++;
			if(print_Flag % 10 == 0) {//每十个数据一行
				System.out.println();
			}
		}
		System.out.println();
	}
}
